From 4ec8e2b20e9e9dc4dcf3a4c789390cfe50455075 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 2 Feb 2004 23:20:42 +0000 Subject: [PATCH] Add init_hadjust_value and prev_width. Initialize them here. ...and here. Tue Feb 3 00:15:17 2004 Matthias Clasen * gtk/gtktreeprivate.h (struct _GtkTreeViewPrivate): Add init_hadjust_value and prev_width. * gtk/gtktreeview.c (gtk_tree_view_init): Initialize them here. * gtk/gtktreeview.c (gtk_tree_view_update_size): ...and here. * gtk/gtktreeview.c (gtk_tree_view_size_allocate): Use them here to properly handle the initial position of rtl-oriented tree views. (#127581, chinen@jp.ibm.com) --- ChangeLog | 11 +++++++++++ ChangeLog.pre-2-10 | 11 +++++++++++ ChangeLog.pre-2-4 | 11 +++++++++++ ChangeLog.pre-2-6 | 11 +++++++++++ ChangeLog.pre-2-8 | 11 +++++++++++ gtk/gtktreeprivate.h | 2 ++ gtk/gtktreeview.c | 31 +++++++++++++++++++++++++++++-- 7 files changed, 86 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab7a312284..48d1f5acac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Tue Feb 3 00:15:17 2004 Matthias Clasen + + * gtk/gtktreeprivate.h (struct _GtkTreeViewPrivate): Add + init_hadjust_value and prev_width. + * gtk/gtktreeview.c (gtk_tree_view_init): Initialize + them here. + * gtk/gtktreeview.c (gtk_tree_view_update_size): ...and here. + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): Use them + here to properly handle the initial position of rtl-oriented + tree views. (#127581, chinen@jp.ibm.com) + 2004-01-20 Federico Mena Quintero Fix #130846, reported by R. McFarland . diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index ab7a312284..48d1f5acac 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,14 @@ +Tue Feb 3 00:15:17 2004 Matthias Clasen + + * gtk/gtktreeprivate.h (struct _GtkTreeViewPrivate): Add + init_hadjust_value and prev_width. + * gtk/gtktreeview.c (gtk_tree_view_init): Initialize + them here. + * gtk/gtktreeview.c (gtk_tree_view_update_size): ...and here. + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): Use them + here to properly handle the initial position of rtl-oriented + tree views. (#127581, chinen@jp.ibm.com) + 2004-01-20 Federico Mena Quintero Fix #130846, reported by R. McFarland . diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index ab7a312284..48d1f5acac 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,14 @@ +Tue Feb 3 00:15:17 2004 Matthias Clasen + + * gtk/gtktreeprivate.h (struct _GtkTreeViewPrivate): Add + init_hadjust_value and prev_width. + * gtk/gtktreeview.c (gtk_tree_view_init): Initialize + them here. + * gtk/gtktreeview.c (gtk_tree_view_update_size): ...and here. + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): Use them + here to properly handle the initial position of rtl-oriented + tree views. (#127581, chinen@jp.ibm.com) + 2004-01-20 Federico Mena Quintero Fix #130846, reported by R. McFarland . diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index ab7a312284..48d1f5acac 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,14 @@ +Tue Feb 3 00:15:17 2004 Matthias Clasen + + * gtk/gtktreeprivate.h (struct _GtkTreeViewPrivate): Add + init_hadjust_value and prev_width. + * gtk/gtktreeview.c (gtk_tree_view_init): Initialize + them here. + * gtk/gtktreeview.c (gtk_tree_view_update_size): ...and here. + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): Use them + here to properly handle the initial position of rtl-oriented + tree views. (#127581, chinen@jp.ibm.com) + 2004-01-20 Federico Mena Quintero Fix #130846, reported by R. McFarland . diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index ab7a312284..48d1f5acac 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,14 @@ +Tue Feb 3 00:15:17 2004 Matthias Clasen + + * gtk/gtktreeprivate.h (struct _GtkTreeViewPrivate): Add + init_hadjust_value and prev_width. + * gtk/gtktreeview.c (gtk_tree_view_init): Initialize + them here. + * gtk/gtktreeview.c (gtk_tree_view_update_size): ...and here. + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): Use them + here to properly handle the initial position of rtl-oriented + tree views. (#127581, chinen@jp.ibm.com) + 2004-01-20 Federico Mena Quintero Fix #130846, reported by R. McFarland . diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h index 9e1bcd832f..5940afd3de 100644 --- a/gtk/gtktreeprivate.h +++ b/gtk/gtktreeprivate.h @@ -210,6 +210,8 @@ struct _GtkTreeViewPrivate GtkTreeViewSearchEqualFunc search_equal_func; gpointer search_user_data; GtkDestroyNotify search_destroy; + guint init_hadjust_value :1; + gint prev_width; }; #ifdef __GNUC__ diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 9402c91be8..8aa0a09c79 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -1076,6 +1076,8 @@ gtk_tree_view_init (GtkTreeView *tree_view) tree_view->priv->search_column = -1; tree_view->priv->search_dialog_position_func = gtk_tree_view_search_position_func; tree_view->priv->search_equal_func = gtk_tree_view_search_equal_func; + tree_view->priv->init_hadjust_value = TRUE; + tree_view->priv->width = 0; } @@ -1583,10 +1585,12 @@ gtk_tree_view_update_size (GtkTreeView *tree_view) if (tree_view->priv->model == NULL) { tree_view->priv->width = 0; + tree_view->priv->prev_width = 0; tree_view->priv->height = 0; return; } + tree_view->priv->prev_width = tree_view->priv->width; tree_view->priv->width = 0; /* keep this in sync with size_allocate below */ for (list = tree_view->priv->columns, i = 0; list; list = list->next, i++) @@ -1887,6 +1891,7 @@ gtk_tree_view_size_allocate (GtkWidget *widget, GtkTreeView *tree_view; gboolean width_changed = FALSE; gboolean dy_changed = FALSE; + gint old_width = widget->allocation.width; g_return_if_fail (GTK_IS_TREE_VIEW (widget)); @@ -1921,8 +1926,30 @@ gtk_tree_view_size_allocate (GtkWidget *widget, tree_view->priv->hadjustment->lower = 0; tree_view->priv->hadjustment->upper = MAX (tree_view->priv->hadjustment->page_size, tree_view->priv->width); - if (tree_view->priv->hadjustment->value + allocation->width > tree_view->priv->width) - tree_view->priv->hadjustment->value = MAX (tree_view->priv->width - allocation->width, 0); + if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL) + { + if (allocation->width < tree_view->priv->width) + { + if (tree_view->priv->init_hadjust_value) + { + tree_view->priv->hadjustment->value = MAX (tree_view->priv->width - allocation->width, 0); + tree_view->priv->init_hadjust_value = FALSE; + } + else if(allocation->width != old_width) + tree_view->priv->hadjustment->value = CLAMP(tree_view->priv->hadjustment->value - allocation->width + old_width, 0, tree_view->priv->width - allocation->width); + else + tree_view->priv->hadjustment->value = CLAMP(tree_view->priv->width - (tree_view->priv->prev_width - tree_view->priv->hadjustment->value), 0, tree_view->priv->width - allocation->width); + } + else + { + tree_view->priv->hadjustment->value = 0; + tree_view->priv->init_hadjust_value = TRUE; + } + } + else + if (tree_view->priv->hadjustment->value + allocation->width > tree_view->priv->width) + tree_view->priv->hadjustment->value = MAX (tree_view->priv->width - allocation->width, 0); + gtk_adjustment_changed (tree_view->priv->hadjustment); tree_view->priv->vadjustment->page_size = allocation->height - TREE_VIEW_HEADER_HEIGHT (tree_view); -- 2.30.2